package com.xuecheng.content.job;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xuecheng.content.entity.CoursePubMsg;
import com.xuecheng.content.service.CoursePubMsgService;
import com.xuecheng.content.service.CoursePubService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * <p></p>
 *
 * @Description:
 */
@Slf4j
@Component
public class CoursePublishTask {

    @Autowired
    private CoursePubService coursePubService;

    @Autowired
    private CoursePubMsgService coursePubMsgService;


    /*
    * cron表达式：源于quratz（cron表达式是七位-七子表达式）
    *
    *   秒
        分钟
        小时
        每月的某一天
        月
        星期几

    *   PS：第四位和第六位是冲突的
    *       这两位其中有一位必为 ？
    *
    *   3 * * * * ? 每一年的每一月的每一天的每一小时的每一分钟的第三秒执行
    *   3,15,20 * * * * ? 每一年的每一月的每一天的每一小时的每一分钟的第三秒、第十五秒、第二十秒执行（某一秒中会执行三次）
    *   5-10 * * * * ? 每一年的每一月的每一天的每一小时的每一分钟的第五秒到第十秒执行（某一秒中会执行六次）
    *   0/3 * 8 * * ? 每一年的每一月的每一天的8点中的每一分钟的从第零秒开始每隔三秒钟执行（某一秒中会执行六次）
    *   15/3 * 8 3-10 * ? 每一年的每一月的3号到10号的8点中的每一分钟的从第15秒开始每隔三秒钟执行（某一秒中会执行六次）
    *
    *   当前场景下服务为了同步课程发布数据内容
    *           每隔5-10秒执行
    * */
    @Scheduled(cron = "0/50 * * * * ?")
    public void coursePublishTask() {

        log.info("定时器开始执行，检查数据并发送消息");

        // 1.查询课程发布消息表中未发送成功的数据--集合数据
        LambdaQueryWrapper<CoursePubMsg> msgQueryWrapper = new LambdaQueryWrapper<>();
        msgQueryWrapper.eq(CoursePubMsg::getPubStatus, CoursePubMsg.UNSENT);
        List<CoursePubMsg> list = coursePubMsgService.list(msgQueryWrapper);

        // TODO 2.将集合数据中的每个元素查询并发送消息
        for (CoursePubMsg coursePubMsg : list) {
            Long companyId = coursePubMsg.getCompanyId();
            Long courseId = coursePubMsg.getCourseId();
            coursePubService.publish(courseId,companyId,true);
        }

    }

}
